package waitandnotify;

public class Foodie extends Thread{

    /*
    * 循环
    * 同步带码块
    * 判断共享数据是否到了末尾(到了末尾)
    * 判断共享数据后是否到了末尾(没到末尾,执行核心逻辑)
    * */

    public void run(){
        while(true){
            // 同步代码快
            synchronized (Desk.lock) {
                if(Desk.count == 0){
                    break;
                }else{
                    if(Desk.foodFlag == 0){
                        // 没有面条,等待
                        try {
                            Desk.lock.wait();// 当前线程跟锁进行绑定
                        } catch (InterruptedException e) {
                            throw new RuntimeException(e);
                        }

                    }else{
                        // 有面条

                        // 修改桌子状态
                        Desk.foodFlag = 0;

                        // 饭量减一
                        Desk.count--;

                        System.out.println("你还能吃"+Desk.count+"碗面条");

                        // 吃完之后,唤醒厨师
                        Desk.lock.notifyAll();
                    }
                }
            }
        }
    }
}
